<!DOCTYPE html>
<html>

<head>
    
    <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer">

<meta name="description" content="A new Hugo site.">
<title>
    使用Modelsim中的CommandTools 进行仿真 - dashjay
</title>



<link rel="shortcut icon" href="/sam.ico">








<link rel="stylesheet" href="/css/main.min.4321edce0de245f4b1d32680d89ac669940fe5dec17e1791c721d9a0954987b4.css" integrity="sha256-QyHtzg3iRfSx0yaA2JrGaZQP5d7BfheRxyHZoJVJh7Q=" crossorigin="anonymous" media="screen">





<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Didact+Gothic">

<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:image" content="http://dashjay.gitee.io/tn.png"/>

<meta name="twitter:title" content="使用Modelsim中的CommandTools 进行仿真"/>
<meta name="twitter:description" content="之前一直使用的是iverilog进行的仿真，生成vvp可执行文件之后运行得到结果 方法如下直接给Makefile
 all: cmp vvp lxt cmp: iverilog *.v -o tb_top.vvp vvp: vvp tb_top.vvp lxt: cat top.lxt clean: @rm -rf tb_top.vvp tb_top.lxt 有了以上Makefile，将*.v文件和Makefile放在一起，make即可完成相应操作
但是用这种方式，生成的波形只能使用GTKwave来查看，并且当有一些复杂的情况出现时候，iverilog就无法处理了，所以我们使用Intel提供的免费的Modelsim来完成仿真，仿真资料比较少，全是图形化界面的介绍，道路坎坷。
第一步：下载全套工具 intel官网下载的lite版本，最小套装 Quartus-lite-18.1.0.625-linux.tar
第二步：安装 解压之后有一键安装脚本，运行的时候会提示缺库，安装对应的库文件就可以使用了。
第三步：仿真出波形 1. vlog工具 路径位于intelFPGA_lite/18.1/modelsim_ase/bin/vlog 执行vlog *.v即可对当前目录所有.v文件进行编译操作
我给了一个模板.v文件
module top_module( input [3:0] a, input [3:0] b, output reg[7:0] p ); reg [7:0] pv; reg [7:0] ap; integer i; always@(*) begin pv = 8&#39;b00000000; ap = {4&#39;b0000,a}; for(i = 0; i&lt;=3; i=i&#43;1) begin if(b[i]==1) pv = pv &#43; ap; ap = {ap[6:0],1&#39;b0}; end p = pv; end endmodule 运行vlog *."/>

<meta property="og:title" content="使用Modelsim中的CommandTools 进行仿真" />
<meta property="og:description" content="之前一直使用的是iverilog进行的仿真，生成vvp可执行文件之后运行得到结果 方法如下直接给Makefile
 all: cmp vvp lxt cmp: iverilog *.v -o tb_top.vvp vvp: vvp tb_top.vvp lxt: cat top.lxt clean: @rm -rf tb_top.vvp tb_top.lxt 有了以上Makefile，将*.v文件和Makefile放在一起，make即可完成相应操作
但是用这种方式，生成的波形只能使用GTKwave来查看，并且当有一些复杂的情况出现时候，iverilog就无法处理了，所以我们使用Intel提供的免费的Modelsim来完成仿真，仿真资料比较少，全是图形化界面的介绍，道路坎坷。
第一步：下载全套工具 intel官网下载的lite版本，最小套装 Quartus-lite-18.1.0.625-linux.tar
第二步：安装 解压之后有一键安装脚本，运行的时候会提示缺库，安装对应的库文件就可以使用了。
第三步：仿真出波形 1. vlog工具 路径位于intelFPGA_lite/18.1/modelsim_ase/bin/vlog 执行vlog *.v即可对当前目录所有.v文件进行编译操作
我给了一个模板.v文件
module top_module( input [3:0] a, input [3:0] b, output reg[7:0] p ); reg [7:0] pv; reg [7:0] ap; integer i; always@(*) begin pv = 8&#39;b00000000; ap = {4&#39;b0000,a}; for(i = 0; i&lt;=3; i=i&#43;1) begin if(b[i]==1) pv = pv &#43; ap; ap = {ap[6:0],1&#39;b0}; end p = pv; end endmodule 运行vlog *." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://dashjay.gitee.io/posts/modelsim-commandtools/" />
<meta property="og:image" content="http://dashjay.gitee.io/tn.png"/>
<meta property="article:published_time" content="2019-07-27T00:00:00+00:00" />
<meta property="article:modified_time" content="2019-07-27T00:00:00+00:00" /><meta property="og:site_name" content="Call me Sam" />


    

    
    
    
    <title>
        
        使用Modelsim中的CommandTools 进行仿真
        
    </title>
</head>

<body>
    
    
    <header class="wrap flex-container">
        <h1>使用Modelsim中的CommandTools 进行仿真</h1>
    </header>
    
    <main class="wrap">
        
<div class="flex-container">
    <aside role="complementary">
        Sat Jul 27, 2019 &#183; 189 words
        <div class="tag-container">
            
            
            <span class="tag">
                <a href="/tags/verilog/">
                    verilog
                </a>
            </span>
            
            
            
            <span class="tag">
                <a href="/tags/hdl/">
                    HDL
                </a>
            </span>
            
            
        </div>
    </aside>
    <hr />
    <article role="article">
        <blockquote>
<p>之前一直使用的是iverilog进行的仿真，生成vvp可执行文件之后运行得到结果 方法如下直接给Makefile</p>
</blockquote>
<pre><code>all: cmp vvp lxt

cmp:
    iverilog *.v -o tb_top.vvp
vvp:
    vvp tb_top.vvp

lxt:
    cat top.lxt

clean:
    @rm -rf tb_top.vvp tb_top.lxt
</code></pre><p>有了以上<code>Makefile</code>，将<code>*.v</code>文件和<code>Makefile</code>放在一起，make即可完成相应操作</p>
<p>但是用这种方式，生成的波形只能使用GTKwave来查看，并且当有一些复杂的情况出现时候，iverilog就无法处理了，所以我们使用Intel提供的免费的Modelsim来完成仿真，仿真资料比较少，全是图形化界面的介绍，道路坎坷。</p>
<h1 id="第一步下载全套工具">第一步：下载全套工具</h1>
<p>intel官网下载的lite版本，最小套装 <code>Quartus-lite-18.1.0.625-linux.tar</code></p>
<h1 id="第二步安装">第二步：安装</h1>
<p>解压之后有一键安装脚本，运行的时候会提示缺库，安装对应的库文件就可以使用了。</p>
<h1 id="第三步仿真出波形">第三步：仿真出波形</h1>
<h2 id="1-vlog工具">1. vlog工具</h2>
<p>路径位于<code>intelFPGA_lite/18.1/modelsim_ase/bin/vlog</code> 执行<code>vlog *.v</code>即可对当前目录所有<code>.v</code>文件进行编译操作</p>
<p>我给了一个模板<code>.v</code>文件</p>
<pre><code>module top_module(
    input [3:0] a,
    input [3:0] b,
    output reg[7:0] p
);

    reg [7:0] pv;
    reg [7:0] ap;
    integer i;

    always@(*)
    begin
        pv = 8'b00000000;
        ap = {4'b0000,a};
        for(i = 0; i&lt;=3; i=i+1)
            begin
                if(b[i]==1)
                    pv = pv + ap;
                    ap = {ap[6:0],1'b0};
            end
        p = pv;
    end
endmodule
</code></pre><p>运行<code>vlog *.v</code>命令即可在当前目录下生成一个work文件夹，里面有一些编译的成果，不过不用太在意文件的具体内容。</p>
<h2 id="2使用vsim">2.使用vsim</h2>
<p>命令是 <code>vsim -c -do test.do top_module</code> 这个test.do文件里面的内容有哪些呢？</p>
<pre><code>&gt; cat test.do
add list -hexadecimal /top_module/a
add list -hexadecimal /top_module/b
add list -hexadecimal /top_module/p

do sim.do

write list test.list

quit -f
</code></pre><p>不用太在意具体的内容，知道<code>-hexadecimal</code>是十六进制，去掉自动变成十进制。 下面有一个 <code>sim.do</code>内容是</p>
<pre><code>add wave a
add wave b
add wave p
force a 16#0x8
force b 16#0xa
run 1000
force b 16#0x2
run 1000
force b 16#0x3
run 1000
force b 16#0x4
run 1000
force b 16#0x5
</code></pre><p>相当于，将模块中的<code>a,b,p</code>接口抽离出来，接在sim文件当中，强行给了<code>a,b</code>输入，给模块提供了测试激励。</p>
<p>我写了一个Makefile 文件如下</p>
<pre><code>all: cmp sim cat

cmp:
    vlog *.v
sim:
    vsim -c -do test.do top_module
cat:
    cat test.list
</code></pre><p>那么我把我的文件目录压缩上传提供下载试试</p>
<p>![](/post/2019-07-27-modelsim-commandtools.en_files/屏幕快照 2019-07-27 下午2.17.33.jpg)</p>
<p><a href="/post/2019-07-27-modelsim-commandtools.en_files/finaltest.zip">文件下载</a></p>
<pre><code>.
├── Makefile
├── sim.do
├── test.do
└── top_module.v
</code></pre><p>谢谢</p>

    </article>
</div>


        
<nav role="navigation" class="flex-container bottom-menu">
    
<hr />
<p>


    
        <a href="/posts">back</a>
        
            &#183;
        
    

    
        
            <a href="/posts">我的文章</a>
        
    
    
        
            &#183; 
            <a href="/gallery">画册</a>
        
            &#183; 
            <a href="/portfolio">珍贵时光</a>
        
            &#183; 
            <a href="/about">关于我</a>
        
    
    &#183; 
    <a href="/">
        main
    </a>

</p>
</nav>

    </main>
    
    <footer class="flex-container footer">I will code for a long time. Would you?</footer>
    
    
</body>

</html>